Podstawowe typy danych w Javie

Typy prymitywne, tablice, łańcuchy znaków oraz typ wyliczeniowy


dr inż. Aleksander Smywiński-Pohl

apohllo@agh.edu.pl

http://apohllo.pl/dydaktyka/programowanie-obiektowe

konsultacje: wtorek 15:30 - 18:00, pokój 4.61

Typy prymitywne

  • boolean - wartości true i false
  • char - pojedyncze znaki z zestawu Unicode
  • byte - jednobajtowa liczba ze znakiem
  • short - dwubajtowa liczba ze znakiem
  • int - czterobajtowa liczba ze znakiem
  • long - ośmiobajtowa liczba ze znakiem
  • float - liczba zmiennopozycyjna, co najmniej 6 cyfr znaczących
  • double - liczba zmiennopozyzyjna, co najmniej 15 cyfr znaczących

Typ boolean

In [ ]:
int invalidValue = 1;
if(invalidValue) {                                  
    System.out.println("Wycieraczki są włączone");
} else {
    System.out.println("Wycieraczki są wyłączone");
}
In [ ]:
boolean wipersOn = true;
if(wipersOn) {
    System.out.println("Wycieraczki są włączone");
} else {
    System.out.println("Wycieraczki są wyłączone");
}

Typ char

In [ ]:
import static java.lang.System.out;

char driverCategory = 'ś';
char tick = '\u2713';
out.println(driverCategory);
out.println(tick);
out.println(Character.isLetter(driverCategory));
out.println(Character.isLetter(tick));

Typy całkowitoliczbowe: byte, short, int oraz long

typ liczba bajtów wartość minimalna wartość maksymalna
byte 1 -128 127
short 2 -32 768 32767
int 4 -2 147 483 648 2 147 483 647
long 8 -9 223 372 036 854 775 808 9 223 372 036 854 775 807
In [ ]:
int a = 10;
int b = 20;
long c = a + b;
//short d = a + b;
short e = (short) (a + b);
System.out.println(e);
In [ ]:
int a = 10;
int b = 20;
int e;
if(Short.MAX_VALUE > a + b){
    e = (short) (a + b);
}
byte f = 127;
byte g = 127;
byte h = (byte) (f + g);
System.out.println(h);

Typy zmiennopozycyjne float i double

typ liczba bajtów cecha (bity) mantysa (bity)
float 4 8 23
double 8 11 52
In [ ]:
import static java.lang.System.out;

int a = 0;
float b = 0.0f;

if(a == b){
    out.println("Wartości są identyczne");
}
In [ ]:
import static java.lang.System.out;

float a = 0.0f;
float b = 0.001f;
for(int i=0; i < 1000; i++){
    a += b;
}
if(a == 1.0){
    out.println("Wartości są identyczne");
} else {
    out.println("Wartości nie są identyczne");
}
In [ ]:
import static java.lang.System.out;

float a = 0.0f;
float b = 0.001f;
double EPSILON = 1e-5;

for(int i=0; i < 1000; i++){
    a += b;
}
if(Math.abs(a - 1) < EPSILON){
    out.println("Wartości są prawie identyczne");
} else {
    out.println("Wartości nie są prawie identyczne");
}

Typy otokowe

  • Boolean
  • Byte
  • Short
  • Character
  • Integer
  • Long
  • Float
  • Double

In [ ]:
Integer a = new Integer(10);
Integer b = new Integer(20);
Integer c = a + b;
System.out.println(c.toString());
In [ ]:
int d = 30;
out.println(d.toString());

Zastosowanie typów otokowych

In [ ]:
import java.util.*;

List<Integer> list = new LinkedList<Integer>();
list.add(new Integer(10));
list.add(new Integer(20));

System.out.println(list);
In [ ]:
// Autoboxing
import java.util.*;

List<Integer> list = new LinkedList<Integer>();

list.add(30);
list.add(40);

System.out.println(list);

Porównywanie typów otokowych

In [ ]:
import static java.lang.System.out;

Integer a = 200;
Integer b = 200;
if(a == b){ 
    out.println("Wartości są równe");
} else {
    out.println("Wartości nie są równe");
}
In [ ]:
import static java.lang.System.out;

Integer a = 200;
Integer b = 200;

if(a == b){ 
    out.println("Wartości są równe");
} else {
    out.println("Wartości nie są równe");
}

if(a.equals(b)){ 
    out.println("Wartości są równe");
} else {
    out.println("Wartości nie są równe");
}

Typ tablicowy

In [ ]:
import static java.lang.System.out;

int[] speedVector = new int[3];
speedVector[0] = 10;
speedVector[2] = -3;

for(int i = 0; i < 4; i++){
    out.println("Składowa " + (i + 1) + " wektora wynosi: " + speedVector[i]);
}

Typ tablicowy - obiekty

In [ ]:
class Speed {
    public int value;
    public String unit;

    public Speed(int value, String unit){
        this.value = value;
        this.unit = unit;
    }
}

Typ tablicowy - obiekty

In [ ]:
import static java.lang.System.out;

Speed[] speedVector = new Speed[3];
speedVector[0] = new Speed(10, "km/h");
speedVector[1] = new Speed(-3, "km/h");

for(int i = 0; i < 3; i++){
    out.println("Składowa " + (i + 1) + " wektora wynosi: " + 
        speedVector[i].value + " " + speedVector[i].unit);
}

Zabezpieczenie przed wyjątkiem NullPointerException

In [ ]:
import static java.lang.System.out;

Speed[] speedVector = new Speed[3];
speedVector[0] = new Speed(10, "km/h");
speedVector[1] = new Speed(-3, "km/h");

for(int i = 0; i < 3; i++){
    if(speedVector[i] == null) {
        out.println("Składowa " + (i + 1) + " wektora jest pusta");
    } else {
        out.println("Składowa " + (i + 1) + " wektora wynosi: " + 
            speedVector[i].value + " " + speedVector[i].unit);
    }
}

Alternatywna pętla for

In [ ]:
import static java.lang.System.out;

Speed[] speedVector = new Speed[3];
speedVector[0] = new Speed(10, "km/h");
speedVector[1] = new Speed(-3, "km/h");

for(Speed element : speedVector) {
    if(element == null) {
        out.println("Składowa wektora jest pusta");
    } else {
        out.println("Składowa wektora wynosi: " + 
            element.value + " " + element.unit);
    }
}

Porównywanie tablic

In [ ]:
import static java.lang.System.out;

int[] speedVector1 = { 10, -3, 0 };
int[] speedVector2 = { 10, -3, 0 };

if(speedVector1 == speedVector2){
    out.println("Wektory są równe");
} else {
    out.println("Wektory nie są równe");
}
In [ ]:
import static java.lang.System.out;

int[] speedVector1 = { 10, -3, 0 };
int[] speedVector2 = { 10, -3, 0 };
if(speedVector1.equals(speedVector2)){
    out.println("Wektory są równe");
} else {
    out.println("Wektory nie są równe");
}
In [ ]:
import static java.lang.System.out;
import java.util.*;

int[] speedVector1 = { 10, -3, 0 };
int[] speedVector2 = { 10, -3, 0 };
if(Arrays.equals(speedVector1, speedVector2)){
    out.println("Wektory są równe");
} else {
    out.println("Wektory nie są równe");
}

Sortowanie i wypisywanie tablic

In [ ]:
import static java.lang.System.out;
import java.util.*;

int[] vector = { 7, 15, 10, -3, 9, 12};
Arrays.sort(vector);
out.println(vector.toString());
out.println(Arrays.toString(vector));

Tablice wielowymiarowe

In [ ]:
import static java.lang.System.out;

int[][] matrix1 = new int[10][10];
out.println(matrix1[0][0]);
In [ ]:
import static java.lang.System.out;

int[][] matrix2 = new int[10][];
//out.println(matrix2[0][0]);

for(int i = 0; i < 10; i++){
    matrix2[i] = new int[10];
}
out.println(matrix2[0][0]);

Porównywanie i wyświetlanie tablic wielowymiarowych

In [ ]:
import static java.lang.System.out;
import java.util.*;

int[][] matrix1 = { {1, 2}, 
                    {3, 4} };
int[][] matrix2 = { {1, 2}, 
                    {3, 4} };
               
out.println(Arrays.toString(matrix1));
In [ ]:
import static java.lang.System.out;
import java.util.*;

int[][] matrix1 = { {1, 2}, 
                    {3, 4} };

out.println(Arrays.deepToString(matrix1));
In [ ]:
import static java.lang.System.out;
import java.util.*;

int[][] matrix1 = { {1, 2}, 
                    {3, 4} };
int[][] matrix2 = { {1, 2}, 
                    {3, 4} };

if(Arrays.equals(matrix1,matrix2)){
    out.println("Tablice są równe");
} else {
    out.println("Tablice **nie** są równe");
}
In [ ]:
import static java.lang.System.out;
import java.util.*;

int[][] matrix1 = { {1, 2}, 
                    {3, 4} };
int[][] matrix2 = { {1, 2}, 
                    {3, 4} };

if(Arrays.deepEquals(matrix1,matrix2)){
    out.println("Tablice są równe");
} else {
    out.println("Tablice **nie** są równe");
}

Łańcuchy znaków

In [ ]:
import static java.lang.System.out;

String unit1 = "km/h";
String unit2 = "km/h";

if(unit1 == unit2){
    out.println("Jednostki są równe");
} else {
    out.println("Jednostki **nie** są równe");
}
In [ ]:
import static java.lang.System.out;

String unit1 = "km/h";
String letter = "h";
String unit2 = "km/"  + letter;

if(unit1 == unit2){
    out.println("Jednostki są równe");
} else {
    out.println("Jednostki **nie** są równe");
}
In [ ]:
import static java.lang.System.out;

String unit1 = "km/h";
String letter = "h";
String unit2 = "km/"  + letter;

if(unit1.equals(unit2)){
    out.println("Jednostki są równe");
} else {
    out.println("Jednostki **nie** są równe");
}

Modyfikacja łańcuchów

In [ ]:
import static java.lang.System.out;

String km = "km";
String divider = "/";
String hour = "h";

String unit1 = "";
String unit2 = unit1;
unit1 += km;
unit1 += divider;
unit1 += hour;

if(unit1 != unit2){
    out.println("Łańcuchy nie są równe");
}
In [ ]:
import static java.lang.System.out;

String km = "km";
String divider = "/";
String hour = "h";

StringBuilder builder1 = new StringBuilder();
StringBuilder builder2 = builder1;
builder1.append(km);
builder1.append(divider);
builder1.append(hour);

if(builder1 == builder2){
    out.println("Fabryki łańcuchów są równe");
}

out.println(builder1.toString());

Typ wyliczeniowy

In [ ]:
import static java.lang.System.out;
import java.time.DayOfWeek;
import java.util.*;

/*
enum DayOfWeek {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    ...
}
*/

DayOfWeek day = DayOfWeek.TUESDAY;
out.println(day.name());
out.println(day.ordinal());
out.println(Arrays.toString(DayOfWeek.values()));

Instrukcja selekcji i typ wyliczeniowy

In [ ]:
import static java.lang.System.out;
import java.time.DayOfWeek;

DayOfWeek day = DayOfWeek.TUESDAY;

switch(day){
    case MONDAY:
        out.println("Jak ja nie lubię poniedziałków!");
        break;
    case TUESDAY:
        out.println("No, wreszcie wykład z TO!");
        break;
    case WEDNESDAY:
        out.println("Płaska środa");
        break;
}

Instrukcja selekcji i łańcuchy znaków

In [ ]:
import static java.lang.System.out;
String day = "teusday";

switch(day){
    case "monday":
        out.println("Jak ja nie lubię poniedziałków!");
        break;
    case "tuesday":
        out.println("No, wreszcie wykład z TO!");
        break;
    case "wednesday":
        out.println("Płaska środa");
        break;
}

Porównywanie wartości typu wyliczeniowego

In [ ]:
import static java.lang.System.out;
import java.time.DayOfWeek;

DayOfWeek day1 = DayOfWeek.MONDAY;
DayOfWeek day2 = DayOfWeek.MONDAY;

if(day1 == day2){
    out.println("Dni są równe");
}

Pytania?